package mysql8学习.高级.第06章_索引的数据结构;

/**
 *
 *    MyISAM只缓存索引，不缓存真实数据;
 *    InnoDB不仅缓存索引还要缓存真实数据,对内存要求高  内存大小性能有决定性影响
 *
 *   MyISAM的索引方式都是“非聚簇”的，与 InnoDB 包含1个聚簇索引是不同的。
 *   小结两种引擎中索引的区别:
 *     ① 在InnoDB存储引擎中，我们只需要根据主键值对聚簇索引进行一次查找就能找到对应的记录，
 *        而在MyISAM中却需要进行一次回表操作,意味着MyISAM中建立的索引相当于全部都是二级索引。
 *     ② InnoDB的数据文件本身就是索引文件，而MyISAM索引文件和数据文件是分离的，
 *        索引文件仅保存数据记录的地址。
 *     ③ InnoDB的非聚簇索引data域存储相应记录主键的值，而MyISAM索引记录的是地址。
 *        换句话说，InnoDB的所有非聚簇索引都引用主键作为data域。
 *     ④ MyISAM的回表操作是十分快速的，因为是拿着地址偏移量直接到文件中取数据的，
 *        反观InnoDB是通过获取主键之后再去聚簇索引里找记录，虽然说也不慢，但还是比不上直接用地址去访问。
 *     ⑤ InnoDB要求表必须有主键(MyISAM可以没有)。
 *        如果没有显式指定,则MySQL系统会自动选择一个可以非空且唯一标识数据记录的列作为主键。
 *        如果不存在这种列，则MySQL自动为InnoDB表生成一个隐含字段作为主键,
 *        这个字段长度为6个字节，类型为长整型。
 *
 * 了解不同存储引擎的索引实现方式对于正确使用和优化索引都非常有帮助。
 *      比如:
 *      举例1:知道了InnoDB的索引实现后，就很容易明白为什么不建议使用过长的字段作为主键，
 *           因为所有二级索引都引用主键索引，过长的主键索引会令二级索引变得过大。
 *
 *      举例2:用非单调的字段作为主键在InnoDB中不是个好主意，
 *           因为InnoDB数据文件本身是一棵B+Tree, 非单调的主键会造成在插入新记录时，
 *           数据文件为了维持B+Tree的特性而频繁地分裂调整，
 *           十分低效，而使用自增字段作为主键则是一个很好的选择。
 *
 *
 */
public class H_MyISAM引擎和InnoDB引擎索引区别 {
}
